package com.example.springboot01.event;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.Date;

/**
 * @author keyer
 * @Description : 类描述
 * https://www.cnblogs.com/markLogZhu/p/12504211.html
 * Created by cyd on 2021-04-30 23:39:28
 */
public class TestMain {
    /**
     * 1.从容器中拿到Publish对象；
     * 2.publish对象调用say方法时，就会调用context的publishEvent方法；
     * 3.监听器一旦监听到事件产生（由publish对象的publishEvent方法产生），就调用自己的反应方法onApplicationEvent
     * 4.容器关闭
     */
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
        DemoPublisher publisher = context.getBean(DemoPublisher.class);
        publisher.say("hello event", new Date());

        System.out.println("-------------------------------------");
        // 自己手动new的事件源，监听器监听不到
        new DemoEvent(context, "hello world", new Date());
        System.out.println("--------------------------");
        // 必须使用context.publishEvent方法发布的事件源，才能监听到
        context.publishEvent(new DemoEvent(context, "no sb", new Date()));
        context.close();
    }
}
